/*
* Copyright (c) 2017 Sprint
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*    http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

/****************
 Generated By: fdtool enhancements to diafuzzer
 License: same as freeDiameter
****************/


/* 
 * Dictionary definitions of objects specified in rfc7155_avps.
 */
#include <freeDiameter/extension.h>

#define PROTO_VER "unspecified"
#define GEN_DATE  1506697143.67

const char *rfc7155_avps_proto_ver = PROTO_VER;
const double rfc7155_avps_gen_date = GEN_DATE;

/* The content of this file follows the same structure as dict_base_proto.c */

#define CHECK_dict_new( _type, _data, _parent, _ref )                                     \
{                                                                                         \
    int _ret = fd_dict_new( fd_g_config->cnf_dict, (_type), (_data), (_parent), (_ref) ); \
    if ( _ret != 0 && _ret != EEXIST )                                                    \
       return _ret;                                                                       \
}

#define CHECK_dict_search( _type, _criteria, _what, _result )		\
    CHECK_FCT(  fd_dict_search( fd_g_config->cnf_dict, (_type), (_criteria), (_what), (_result), ENOENT) );

struct local_rules_definition {
    struct dict_avp_request avp_vendor_plus_name;
    enum rule_position	position;
    int 			min;
    int			max;
};

#define RULE_ORDER( _position ) ((((_position) == RULE_FIXED_HEAD) || ((_position) == RULE_FIXED_TAIL)) ? 1 : 0 )

/* Attention! This version of the macro uses AVP_BY_NAME_AND_VENDOR, in contrast to most other copies! */
#define PARSE_loc_rules( _rulearray, _parent) {                                                         \
        int __ar;                                                                                       \
        for (__ar=0; __ar < sizeof(_rulearray) / sizeof((_rulearray)[0]); __ar++) {                     \
                struct dict_rule_data __data = { NULL,                                                  \
                        (_rulearray)[__ar].position,                                                    \
                        0,                                                                              \
                        (_rulearray)[__ar].min,                                                         \
                        (_rulearray)[__ar].max};                                                        \
                __data.rule_order = RULE_ORDER(__data.rule_position);                                   \
                CHECK_FCT(  fd_dict_search(                                                             \
                        fd_g_config->cnf_dict,                                                          \
                        DICT_AVP,                                                                       \
                        AVP_BY_NAME_AND_VENDOR,                                                         \
                        &(_rulearray)[__ar].avp_vendor_plus_name,                                       \
                        &__data.rule_avp, 0 ) );                                                        \
                if ( !__data.rule_avp ) {                                                               \
                        TRACE_DEBUG(INFO, "AVP Not found: '%s'", (_rulearray)[__ar].avp_vendor_plus_name.avp_name);             \
                        return ENOENT;                                                                  \
                }                                                                                       \
                {                                                                                       \
                         int _ret = fd_dict_new( fd_g_config->cnf_dict, DICT_RULE, &(__data), (_parent), NULL ); \
                         if ( _ret != 0 && _ret != EEXIST )      {                                      \
                                TRACE_DEBUG(INFO, "Error on rule with AVP '%s'",                        \
                                            (_rulearray)[__ar].avp_vendor_plus_name.avp_name);          \
                                return EINVAL;                                                          \
                         }                                                                              \
                }                                                                                       \
        }                                                                                               \
}

#define CHECK_vendor_new( _data ) { \
        struct dict_object * vendor_found; \
        if (fd_dict_search(fd_g_config->cnf_dict,DICT_VENDOR,VENDOR_BY_ID,&_data.vendor_id,&vendor_found,ENOENT) == ENOENT) { \
                CHECK_FCT(fd_dict_new(fd_g_config->cnf_dict, DICT_VENDOR, &_data, NULL, NULL)); \
        } \
}

#define enumval_def_u32( _val_, _str_ )		\
    { _str_, 		{ .u32 = _val_ }}

#define enumval_def_os( _len_, _val_, _str_ )				\
    { _str_, 		{ .os = { .data = (unsigned char *)_val_, .len = _len_ }}}


static int dict_rfc7155_avps_load_defs(char * conffile)
{
   TRACE_ENTRY("%p", conffile);

	/* Derived AVP types section */
	{
		/* QoSFilterRule */
		{
			/*
				The QosFilterRule format is derived from the OctetString AVP Base
				Format.  It uses the ASCII charset.  Packets may be marked or
				metered based on the following information:

				 Direction                          (in or out)
				 Source and destination IP address  (possibly masked)
				 Protocol
				 Source and destination port        (lists or ranges)
				 DSCP values                        (no mask or range)

				Rules for the appropriate direction are evaluated in order; the
				first matched rule terminates the evaluation.  Each packet is
				evaluated once.  If no rule matches, the packet is treated as best
				effort.  An access device unable to interpret or apply a QoS rule
				SHOULD NOT terminate the session.

				QoSFilterRule filters MUST follow the following format:

				action dir proto from src to dst [options]

        				tag    - Mark packet with a specific DSCP
                				 [DIFFSERV].  The DSCP option MUST be
                				 included.
        				meter  - Meter traffic.  The metering options
                				 MUST be included.

				dir           The format is as described under IPFilterRule.

				proto         The format is as described under IPFilterRule.

				src and dst   The format is as described under IPFilterRule.

				 options:

				 DSCP <color>
				       Color values as defined in [DIFFSERV].  Exact
				       matching of DSCP values is required (no masks or
				       ranges).

				 metering <rate> <color_under> <color_over>
				       The metering option provides Assured Forwarding,
				       as defined in [DIFFSERVAF], and MUST be present
				       if the action is set to meter.  The rate option is
				       the throughput, in bits per second, used
				       by the access device to mark packets.  Traffic
				       over the rate is marked with the color_over
				       codepoint, and traffic under the rate is marked
				       with the color_under codepoint.  The color_under
				       and color_over options contain the drop
				       preferences and MUST conform to the recommended
				       codepoint keywords described in [DIFFSERVAF]
				       (e.g., AF13).

				       The metering option also supports the strict
				       limit on traffic required by Expedited
				       Forwarding, as defined in [DIFFSERVEF].  The
				       color_over option may contain the keyword "drop"
				       to prevent forwarding of traffic that exceeds the
				       rate parameter.

				 The rule syntax is a modified subset of ipfw(8) from FreeBSD,
				 and the ipfw.c code may provide a useful base for
				 implementations.
			*/
			struct dict_type_data data = { AVP_TYPE_OCTETSTRING,	"QoSFilterRule"		, NULL			, NULL			};
			CHECK_dict_new( DICT_TYPE, &data , NULL, NULL);
		}
		
	}
	
   /* AVP section */
   {
		struct dict_object * Address_type;
		struct dict_object * UTF8String_type;
		struct dict_object * DiameterIdentity_type;
		struct dict_object * DiameterURI_type;
		struct dict_object * Time_type;
		struct dict_object * IPFilterRule_type;
		struct dict_object * QoSFilterRule_type;

		CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "Address", &Address_type);
		CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "UTF8String", &UTF8String_type);
		CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "DiameterIdentity", &DiameterIdentity_type);
		CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "DiameterURI", &DiameterURI_type);
		CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "Time", &Time_type);
		CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "IPFilterRule", &IPFilterRule_type);
		CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "QoSFilterRule", &QoSFilterRule_type);
		/* NAS-Port */
		{
			struct dict_avp_data data = {
				5,	/* Code */
				0,	/* Vendor */
				"NAS-Port",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_UNSIGNED32	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* NAS-Port-Id */
		{
			struct dict_avp_data data = {
				87,	/* Code */
				0,	/* Vendor */
				"NAS-Port-Id",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, UTF8String_type, NULL);
		};
		/* NAS-Port-Type */
		{
			struct dict_avp_data data = {
				61,	/* Code */
				0,	/* Vendor */
				"NAS-Port-Type",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_INTEGER32	/* base type of data */
			};
			struct dict_object        *type;
			struct dict_type_data     tdata = { AVP_TYPE_INTEGER32, "Enumerated(NAS-Port-Type)", NULL, NULL, NULL };
			struct dict_enumval_data        t_1 = { "ASYNC", { .i32=0 }};
			struct dict_enumval_data        t_2 = { "SYNC", { .i32=1 }};
			struct dict_enumval_data        t_3 = { "ISDN_SYNC", { .i32=2 }};
			struct dict_enumval_data        t_4 = { "ISDN_ASYNC_V120", { .i32=3 }};
			struct dict_enumval_data        t_5 = { "ISDN_ASYNC_V110", { .i32=4 }};
			struct dict_enumval_data        t_6 = { "VIRTUAL", { .i32=5 }};
			struct dict_enumval_data        t_7 = { "PIAFS", { .i32=6 }};
			struct dict_enumval_data        t_8 = { "HDLC_CLEAR_CHANNEL", { .i32=7 }};
			struct dict_enumval_data        t_9 = { "X25", { .i32=8 }};
			struct dict_enumval_data        t_10 = { "X75", { .i32=9 }};
			struct dict_enumval_data        t_11 = { "G.3_FAX", { .i32=10 }};
			struct dict_enumval_data        t_12 = { "SDSL_SYMMETRIC_DSL", { .i32=11 }};
			struct dict_enumval_data        t_13 = { "IDSL_ISDN_DIGITAL_SUBSCRIBER_LINE", { .i32=14 }};
			struct dict_enumval_data        t_14 = { "ETHERNET", { .i32=15 }};
			struct dict_enumval_data        t_15 = { "XDSL_DIGITAL_SUBSCRIBER_LINE_OF_UNKNOWN_TYPE", { .i32=16 }};
			struct dict_enumval_data        t_16 = { "CABLE", { .i32=17 }};
			struct dict_enumval_data        t_17 = { "WIRELESS_OTHER", { .i32=18 }};
			struct dict_enumval_data        t_18 = { "WIRELESS_IEEE_802.11", { .i32=19 }};
			struct dict_enumval_data        t_19 = { "TOKEN_RING", { .i32=20 }};
			struct dict_enumval_data        t_20 = { "FDDI", { .i32=21 }};
			struct dict_enumval_data        t_21 = { "WIRELESS_CDMA2000", { .i32=22 }};
			struct dict_enumval_data        t_22 = { "WIRELESS_UMTS", { .i32=23 }};
			struct dict_enumval_data        t_23 = { "WIRELESS_1X_EV", { .i32=24 }};
			struct dict_enumval_data        t_24 = { "IAPP", { .i32=25 }};
			struct dict_enumval_data        t_25 = { "FTTP_FIBER_TO_THE_PREMISES", { .i32=26 }};
			struct dict_enumval_data        t_26 = { "WIRELESS_IEEE_802.16", { .i32=27 }};
			struct dict_enumval_data        t_27 = { "WIRELESS_IEEE_802.20", { .i32=28 }};
			struct dict_enumval_data        t_28 = { "WIRELESS_IEEE_802.22", { .i32=29 }};
			struct dict_enumval_data        t_29 = { "PPPOA_PPP_OVER_ATM", { .i32=30 }};
			struct dict_enumval_data        t_30 = { "PPPOEOA_PPP_OVER_ETHERNET_OVER_ATM", { .i32=31 }};
			struct dict_enumval_data        t_31 = { "PPPOEOE_PPP_OVER_ETHERNET_OVER_ETHERNET", { .i32=32 }};
			struct dict_enumval_data        t_32 = { "PPPOEOVLAN_PPP_OVER_ETHERNET_OVER_VLAN", { .i32=33 }};
			struct dict_enumval_data        t_33 = { "PPPOEOQINQ_PPP_OVER_ETHERNET_OVER_IEEE_802.1QINQ", { .i32=34 }};
			struct dict_enumval_data        t_34 = { "XPON_PASSIVE_OPTICAL_NETWORK", { .i32=35 }};
			struct dict_enumval_data        t_35 = { "WIRELESS_XGP", { .i32=36 }};
			/* Create the Enumerated type, and then the AVP */
			CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
			CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_3, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_4, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_5, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_6, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_7, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_8, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_9, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_10, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_11, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_12, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_13, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_14, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_15, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_16, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_17, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_18, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_19, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_20, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_21, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_22, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_23, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_24, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_25, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_26, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_27, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_28, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_29, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_30, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_31, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_32, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_33, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_34, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_35, type, NULL);
			CHECK_dict_new( DICT_AVP, &data, type, NULL);
		};
		/* Called-Station-Id */
		{
			struct dict_avp_data data = {
				30,	/* Code */
				0,	/* Vendor */
				"Called-Station-Id",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, UTF8String_type, NULL);
		};
		/* Calling-Station-Id */
		{
			struct dict_avp_data data = {
				31,	/* Code */
				0,	/* Vendor */
				"Calling-Station-Id",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, UTF8String_type, NULL);
		};
		/* Connect-Info */
		{
			struct dict_avp_data data = {
				77,	/* Code */
				0,	/* Vendor */
				"Connect-Info",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, UTF8String_type, NULL);
		};
		/* Originating-Line-Info */
		{
			struct dict_avp_data data = {
				94,	/* Code */
				0,	/* Vendor */
				"Originating-Line-Info",	/* Name */
				AVP_FLAG_VENDOR,	/* Fixed flags */
				AVP_FLAG_VENDOR,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* Reply-Message */
		{
			struct dict_avp_data data = {
				18,	/* Code */
				0,	/* Vendor */
				"Reply-Message",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, UTF8String_type, NULL);
		};
		/* User-Password */
		{
			struct dict_avp_data data = {
				2,	/* Code */
				0,	/* Vendor */
				"User-Password",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* Password-Retry */
		{
			struct dict_avp_data data = {
				75,	/* Code */
				0,	/* Vendor */
				"Password-Retry",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_UNSIGNED32	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* Prompt */
		{
			struct dict_avp_data data = {
				76,	/* Code */
				0,	/* Vendor */
				"Prompt",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_INTEGER32	/* base type of data */
			};
			struct dict_object        *type;
			struct dict_type_data     tdata = { AVP_TYPE_INTEGER32, "Enumerated(Prompt)", NULL, NULL, NULL };
			struct dict_enumval_data        t_1 = { "NO_ECHO", { .i32=0 }};
			struct dict_enumval_data        t_2 = { "ECHO", { .i32=1 }};
			/* Create the Enumerated type, and then the AVP */
			CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
			CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
			CHECK_dict_new( DICT_AVP, &data, type, NULL);
		};
		/* CHAP-Algorithm */
		{
			struct dict_avp_data data = {
				403,	/* Code */
				0,	/* Vendor */
				"CHAP-Algorithm",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_INTEGER32	/* base type of data */
			};
			struct dict_object        *type;
			struct dict_type_data     tdata = { AVP_TYPE_INTEGER32, "Enumerated(CHAP-Algorithm)", NULL, NULL, NULL };
			struct dict_enumval_data        t_1 = { "CHAP_WITH_MD5", { .i32=5 }};
			/* Create the Enumerated type, and then the AVP */
			CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
			CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
			CHECK_dict_new( DICT_AVP, &data, type, NULL);
		};
		/* CHAP-Ident */
		{
			struct dict_avp_data data = {
				404,	/* Code */
				0,	/* Vendor */
				"CHAP-Ident",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* CHAP-Response */
		{
			struct dict_avp_data data = {
				405,	/* Code */
				0,	/* Vendor */
				"CHAP-Response",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* CHAP-Challenge */
		{
			struct dict_avp_data data = {
				60,	/* Code */
				0,	/* Vendor */
				"CHAP-Challenge",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* ARAP-Password */
		{
			struct dict_avp_data data = {
				70,	/* Code */
				0,	/* Vendor */
				"ARAP-Password",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* ARAP-Challenge-Response */
		{
			struct dict_avp_data data = {
				84,	/* Code */
				0,	/* Vendor */
				"ARAP-Challenge-Response",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* ARAP-Security */
		{
			struct dict_avp_data data = {
				73,	/* Code */
				0,	/* Vendor */
				"ARAP-Security",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_UNSIGNED32	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* ARAP-Security-Data */
		{
			struct dict_avp_data data = {
				74,	/* Code */
				0,	/* Vendor */
				"ARAP-Security-Data",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* Service-Type */
		{
			struct dict_avp_data data = {
				6,	/* Code */
				0,	/* Vendor */
				"Service-Type",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_INTEGER32	/* base type of data */
			};
			struct dict_object        *type;
			struct dict_type_data     tdata = { AVP_TYPE_INTEGER32, "Enumerated(Service-Type)", NULL, NULL, NULL };
			struct dict_enumval_data        t_1 = { "UNKNOWN", { .i32=0 }};
			struct dict_enumval_data        t_2 = { "LOGIN", { .i32=1 }};
			struct dict_enumval_data        t_3 = { "FRAMED", { .i32=2 }};
			struct dict_enumval_data        t_4 = { "CALLBACK_LOGIN", { .i32=3 }};
			struct dict_enumval_data        t_5 = { "CALLBACK_FRAMED", { .i32=4 }};
			struct dict_enumval_data        t_6 = { "OUTBOUND", { .i32=5 }};
			struct dict_enumval_data        t_7 = { "ADMINISTRATIVE", { .i32=6 }};
			struct dict_enumval_data        t_8 = { "NAS_PROMPT", { .i32=7 }};
			struct dict_enumval_data        t_9 = { "AUTHENTICATE_ONLY", { .i32=8 }};
			struct dict_enumval_data        t_10 = { "CALLBACK_NAS_PROMPT", { .i32=9 }};
			struct dict_enumval_data        t_11 = { "CALL_CHECK", { .i32=10 }};
			struct dict_enumval_data        t_12 = { "CALLBACK_ADMINISTRATIVE", { .i32=11 }};
			struct dict_enumval_data        t_13 = { "VOICE", { .i32=12 }};
			struct dict_enumval_data        t_14 = { "FAX", { .i32=13 }};
			struct dict_enumval_data        t_15 = { "MODEM_RELAY", { .i32=14 }};
			struct dict_enumval_data        t_16 = { "IAPP_REGISTER", { .i32=15 }};
			struct dict_enumval_data        t_17 = { "IAPP_AP_CHECK", { .i32=16 }};
			struct dict_enumval_data        t_18 = { "AUTHORIZE_ONLY", { .i32=17 }};
			struct dict_enumval_data        t_19 = { "FRAMED_MANAGEMENT", { .i32=18 }};
			/* Create the Enumerated type, and then the AVP */
			CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
			CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_3, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_4, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_5, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_6, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_7, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_8, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_9, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_10, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_11, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_12, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_13, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_14, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_15, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_16, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_17, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_18, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_19, type, NULL);
			CHECK_dict_new( DICT_AVP, &data, type, NULL);
		};
		/* Callback-Number */
		{
			struct dict_avp_data data = {
				19,	/* Code */
				0,	/* Vendor */
				"Callback-Number",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, UTF8String_type, NULL);
		};
		/* Callback-Id */
		{
			struct dict_avp_data data = {
				20,	/* Code */
				0,	/* Vendor */
				"Callback-Id",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, UTF8String_type, NULL);
		};
		/* Idle-Timeout */
		{
			struct dict_avp_data data = {
				28,	/* Code */
				0,	/* Vendor */
				"Idle-Timeout",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_UNSIGNED32	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* Port-Limit */
		{
			struct dict_avp_data data = {
				62,	/* Code */
				0,	/* Vendor */
				"Port-Limit",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_UNSIGNED32	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* NAS-Filter-Rule */
		{
			struct dict_avp_data data = {
				400,	/* Code */
				0,	/* Vendor */
				"NAS-Filter-Rule",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, IPFilterRule_type, NULL);
		};
		/* Filter-Id */
		{
			struct dict_avp_data data = {
				11,	/* Code */
				0,	/* Vendor */
				"Filter-Id",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, UTF8String_type, NULL);
		};
		/* Configuration-Token */
		{
			struct dict_avp_data data = {
				78,	/* Code */
				0,	/* Vendor */
				"Configuration-Token",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* QoS-Filter-Rule */
		{
			struct dict_avp_data data = {
				407,	/* Code */
				0,	/* Vendor */
				"QoS-Filter-Rule",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, QoSFilterRule_type, NULL);
		};
		/* Framed-Protocol */
		{
			struct dict_avp_data data = {
				7,	/* Code */
				0,	/* Vendor */
				"Framed-Protocol",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_INTEGER32	/* base type of data */
			};
			struct dict_object        *type;
			struct dict_type_data     tdata = { AVP_TYPE_INTEGER32, "Enumerated(Framed-Protocol)", NULL, NULL, NULL };
			struct dict_enumval_data        t_1 = { "PPP", { .i32=1 }};
			struct dict_enumval_data        t_2 = { "SLIP", { .i32=2 }};
			struct dict_enumval_data        t_3 = { "ARAP", { .i32=3 }};
			struct dict_enumval_data        t_4 = { "GANDALF", { .i32=4 }};
			struct dict_enumval_data        t_5 = { "XYLOGICS", { .i32=5 }};
			struct dict_enumval_data        t_6 = { "X.75", { .i32=6 }};
			struct dict_enumval_data        t_7 = { "GPRS_PDP_CONTEXT", { .i32=7 }};
			struct dict_enumval_data        t_8 = { "ASCEND_ARA", { .i32=255 }};
			struct dict_enumval_data        t_9 = { "MPP", { .i32=256 }};
			struct dict_enumval_data        t_10 = { "EURAW", { .i32=257 }};
			struct dict_enumval_data        t_11 = { "EUUI", { .i32=258 }};
			struct dict_enumval_data        t_12 = { "X25", { .i32=259 }};
			struct dict_enumval_data        t_13 = { "COMB", { .i32=260 }};
			struct dict_enumval_data        t_14 = { "FR", { .i32=261 }};
			/* Create the Enumerated type, and then the AVP */
			CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
			CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_3, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_4, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_5, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_6, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_7, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_8, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_9, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_10, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_11, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_12, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_13, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_14, type, NULL);
			CHECK_dict_new( DICT_AVP, &data, type, NULL);
		};
		/* Framed-Routing */
		{
			struct dict_avp_data data = {
				10,	/* Code */
				0,	/* Vendor */
				"Framed-Routing",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_INTEGER32	/* base type of data */
			};
			struct dict_object        *type;
			struct dict_type_data     tdata = { AVP_TYPE_INTEGER32, "Enumerated(Framed-Routing)", NULL, NULL, NULL };
			struct dict_enumval_data        t_1 = { "NONE", { .i32=0 }};
			struct dict_enumval_data        t_2 = { "SEND_ROUTING_PACKETS", { .i32=1 }};
			struct dict_enumval_data        t_3 = { "LISTEN_FOR_ROUTING_PACKETS", { .i32=2 }};
			struct dict_enumval_data        t_4 = { "SEND_AND_LISTEN", { .i32=3 }};
			/* Create the Enumerated type, and then the AVP */
			CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
			CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_3, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_4, type, NULL);
			CHECK_dict_new( DICT_AVP, &data, type, NULL);
		};
		/* Framed-MTU */
		{
			struct dict_avp_data data = {
				12,	/* Code */
				0,	/* Vendor */
				"Framed-MTU",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_UNSIGNED32	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* Framed-Compression */
		{
			struct dict_avp_data data = {
				13,	/* Code */
				0,	/* Vendor */
				"Framed-Compression",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_INTEGER32	/* base type of data */
			};
			struct dict_object        *type;
			struct dict_type_data     tdata = { AVP_TYPE_INTEGER32, "Enumerated(Framed-Compression)", NULL, NULL, NULL };
			struct dict_enumval_data        t_1 = { "NONE", { .i32=0 }};
			struct dict_enumval_data        t_2 = { "IPX_HEADER_COMPRESSION", { .i32=2 }};
			struct dict_enumval_data        t_3 = { "STAC_LZS_COMPRESSION", { .i32=3 }};
			/* Create the Enumerated type, and then the AVP */
			CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
			CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_3, type, NULL);
			CHECK_dict_new( DICT_AVP, &data, type, NULL);
		};
		/* Framed-IP-Address */
		{
			struct dict_avp_data data = {
				8,	/* Code */
				0,	/* Vendor */
				"Framed-IP-Address",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* Framed-IP-Netmask */
		{
			struct dict_avp_data data = {
				9,	/* Code */
				0,	/* Vendor */
				"Framed-IP-Netmask",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* Framed-Route */
		{
			struct dict_avp_data data = {
				22,	/* Code */
				0,	/* Vendor */
				"Framed-Route",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, UTF8String_type, NULL);
		};
		/* Framed-Pool */
		{
			struct dict_avp_data data = {
				88,	/* Code */
				0,	/* Vendor */
				"Framed-Pool",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* Framed-Interface-Id */
		{
			struct dict_avp_data data = {
				96,	/* Code */
				0,	/* Vendor */
				"Framed-Interface-Id",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_UNSIGNED64	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* Framed-IPv6-Prefix */
		{
			struct dict_avp_data data = {
				97,	/* Code */
				0,	/* Vendor */
				"Framed-IPv6-Prefix",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* Framed-IPv6-Route */
		{
			struct dict_avp_data data = {
				99,	/* Code */
				0,	/* Vendor */
				"Framed-IPv6-Route",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, UTF8String_type, NULL);
		};
		/* Framed-IPv6-Pool */
		{
			struct dict_avp_data data = {
				100,	/* Code */
				0,	/* Vendor */
				"Framed-IPv6-Pool",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* Framed-IPX-Network */
		{
			struct dict_avp_data data = {
				23,	/* Code */
				0,	/* Vendor */
				"Framed-IPX-Network",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, UTF8String_type, NULL);
		};
		/* Framed-Appletalk-Link */
		{
			struct dict_avp_data data = {
				37,	/* Code */
				0,	/* Vendor */
				"Framed-Appletalk-Link",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_UNSIGNED32	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* Framed-Appletalk-Network */
		{
			struct dict_avp_data data = {
				38,	/* Code */
				0,	/* Vendor */
				"Framed-Appletalk-Network",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_UNSIGNED32	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* Framed-Appletalk-Zone */
		{
			struct dict_avp_data data = {
				39,	/* Code */
				0,	/* Vendor */
				"Framed-Appletalk-Zone",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* ARAP-Features */
		{
			struct dict_avp_data data = {
				71,	/* Code */
				0,	/* Vendor */
				"ARAP-Features",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* ARAP-Zone-Access */
		{
			struct dict_avp_data data = {
				72,	/* Code */
				0,	/* Vendor */
				"ARAP-Zone-Access",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_INTEGER32	/* base type of data */
			};
			struct dict_object        *type;
			struct dict_type_data     tdata = { AVP_TYPE_INTEGER32, "Enumerated(ARAP-Zone-Access)", NULL, NULL, NULL };
			struct dict_enumval_data        t_1 = { "ONLY_ALLOW_ACCESS_TO_DEFAULT_ZONE", { .i32=1 }};
			struct dict_enumval_data        t_2 = { "USE_ZONE_FILTER_INCLUSIVELY", { .i32=2 }};
			struct dict_enumval_data        t_3 = { "USE_ZONE_FILTER_EXCLUSIVELY", { .i32=3 }};
			/* Create the Enumerated type, and then the AVP */
			CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
			CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_3, type, NULL);
			CHECK_dict_new( DICT_AVP, &data, type, NULL);
		};
		/* Login-IP-Host */
		{
			struct dict_avp_data data = {
				14,	/* Code */
				0,	/* Vendor */
				"Login-IP-Host",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* Login-IPv6-Host */
		{
			struct dict_avp_data data = {
				98,	/* Code */
				0,	/* Vendor */
				"Login-IPv6-Host",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* Login-Service */
		{
			struct dict_avp_data data = {
				15,	/* Code */
				0,	/* Vendor */
				"Login-Service",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_INTEGER32	/* base type of data */
			};
			struct dict_object        *type;
			struct dict_type_data     tdata = { AVP_TYPE_INTEGER32, "Enumerated(Login-Service)", NULL, NULL, NULL };
			struct dict_enumval_data        t_1 = { "TELNET", { .i32=0 }};
			struct dict_enumval_data        t_2 = { "RLOGIN", { .i32=1 }};
			struct dict_enumval_data        t_3 = { "TCP_CLEAR", { .i32=2 }};
			struct dict_enumval_data        t_4 = { "PORTMASTER", { .i32=3 }};
			struct dict_enumval_data        t_5 = { "LAT", { .i32=4 }};
			struct dict_enumval_data        t_6 = { "X25_PAD", { .i32=5 }};
			struct dict_enumval_data        t_7 = { "X25_T3POS", { .i32=6 }};
			struct dict_enumval_data        t_8 = { "UNASSIGNED", { .i32=7 }};
			/* Create the Enumerated type, and then the AVP */
			CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
			CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_3, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_4, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_5, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_6, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_7, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_8, type, NULL);
			CHECK_dict_new( DICT_AVP, &data, type, NULL);
		};
		/* Login-TCP-Port */
		{
			struct dict_avp_data data = {
				16,	/* Code */
				0,	/* Vendor */
				"Login-TCP-Port",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_UNSIGNED32	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* Login-LAT-Service */
		{
			struct dict_avp_data data = {
				34,	/* Code */
				0,	/* Vendor */
				"Login-LAT-Service",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* Login-LAT-Node */
		{
			struct dict_avp_data data = {
				35,	/* Code */
				0,	/* Vendor */
				"Login-LAT-Node",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* Login-LAT-Group */
		{
			struct dict_avp_data data = {
				36,	/* Code */
				0,	/* Vendor */
				"Login-LAT-Group",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* Login-LAT-Port */
		{
			struct dict_avp_data data = {
				63,	/* Code */
				0,	/* Vendor */
				"Login-LAT-Port",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* Tunnel-Type */
		{
			struct dict_avp_data data = {
				64,	/* Code */
				0,	/* Vendor */
				"Tunnel-Type",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_INTEGER32	/* base type of data */
			};
			struct dict_object        *type;
			struct dict_type_data     tdata = { AVP_TYPE_INTEGER32, "Enumerated(Tunnel-Type)", NULL, NULL, NULL };
			struct dict_enumval_data        t_1 = { "PPTP", { .i32=1 }};
			struct dict_enumval_data        t_2 = { "L2F", { .i32=2 }};
			struct dict_enumval_data        t_3 = { "L2TP", { .i32=3 }};
			struct dict_enumval_data        t_4 = { "ATMP", { .i32=4 }};
			struct dict_enumval_data        t_5 = { "VTP", { .i32=5 }};
			struct dict_enumval_data        t_6 = { "AH", { .i32=6 }};
			struct dict_enumval_data        t_7 = { "IP_IP_ENCAP", { .i32=7 }};
			struct dict_enumval_data        t_8 = { "MIN_IP_IP", { .i32=8 }};
			struct dict_enumval_data        t_9 = { "ESP", { .i32=9 }};
			struct dict_enumval_data        t_10 = { "GRE", { .i32=10 }};
			struct dict_enumval_data        t_11 = { "DVS", { .i32=11 }};
			struct dict_enumval_data        t_12 = { "IP_IN_IP_TUNNELING", { .i32=12 }};
			struct dict_enumval_data        t_13 = { "VLAN", { .i32=13 }};
			/* Create the Enumerated type, and then the AVP */
			CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
			CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_3, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_4, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_5, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_6, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_7, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_8, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_9, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_10, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_11, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_12, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_13, type, NULL);
			CHECK_dict_new( DICT_AVP, &data, type, NULL);
		};
		/* Tunnel-Medium-Type */
		{
			struct dict_avp_data data = {
				65,	/* Code */
				0,	/* Vendor */
				"Tunnel-Medium-Type",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_INTEGER32	/* base type of data */
			};
			struct dict_object        *type;
			struct dict_type_data     tdata = { AVP_TYPE_INTEGER32, "Enumerated(Tunnel-Medium-Type)", NULL, NULL, NULL };
			struct dict_enumval_data        t_1 = { "IPV4", { .i32=1 }};
			struct dict_enumval_data        t_2 = { "IPV6", { .i32=2 }};
			struct dict_enumval_data        t_3 = { "NSAP", { .i32=3 }};
			struct dict_enumval_data        t_4 = { "HDLC", { .i32=4 }};
			struct dict_enumval_data        t_5 = { "BBN", { .i32=5 }};
			struct dict_enumval_data        t_6 = { "IEEE_802", { .i32=6 }};
			struct dict_enumval_data        t_7 = { "E_163", { .i32=7 }};
			struct dict_enumval_data        t_8 = { "E_164", { .i32=8 }};
			struct dict_enumval_data        t_9 = { "F_69", { .i32=9 }};
			struct dict_enumval_data        t_10 = { "X_121", { .i32=10 }};
			struct dict_enumval_data        t_11 = { "IPX", { .i32=11 }};
			struct dict_enumval_data        t_12 = { "APPLETALK_802", { .i32=12 }};
			struct dict_enumval_data        t_13 = { "DECNET4", { .i32=13 }};
			struct dict_enumval_data        t_14 = { "VINES", { .i32=14 }};
			struct dict_enumval_data        t_15 = { "E_164_NSAP", { .i32=15 }};
			/* Create the Enumerated type, and then the AVP */
			CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
			CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_3, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_4, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_5, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_6, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_7, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_8, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_9, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_10, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_11, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_12, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_13, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_14, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_15, type, NULL);
			CHECK_dict_new( DICT_AVP, &data, type, NULL);
		};
		/* Tunnel-Client-Endpoint */
		{
			struct dict_avp_data data = {
				66,	/* Code */
				0,	/* Vendor */
				"Tunnel-Client-Endpoint",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, UTF8String_type, NULL);
		};
		/* Tunnel-Server-Endpoint */
		{
			struct dict_avp_data data = {
				67,	/* Code */
				0,	/* Vendor */
				"Tunnel-Server-Endpoint",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, UTF8String_type, NULL);
		};
		/* Tunnel-Password */
		{
			struct dict_avp_data data = {
				69,	/* Code */
				0,	/* Vendor */
				"Tunnel-Password",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* Tunnel-Private-Group-Id */
		{
			struct dict_avp_data data = {
				81,	/* Code */
				0,	/* Vendor */
				"Tunnel-Private-Group-Id",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* Tunnel-Assignment-Id */
		{
			struct dict_avp_data data = {
				82,	/* Code */
				0,	/* Vendor */
				"Tunnel-Assignment-Id",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* Tunnel-Preference */
		{
			struct dict_avp_data data = {
				83,	/* Code */
				0,	/* Vendor */
				"Tunnel-Preference",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_UNSIGNED32	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* Tunnel-Client-Auth-Id */
		{
			struct dict_avp_data data = {
				90,	/* Code */
				0,	/* Vendor */
				"Tunnel-Client-Auth-Id",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, UTF8String_type, NULL);
		};
		/* Tunnel-Server-Auth-Id */
		{
			struct dict_avp_data data = {
				91,	/* Code */
				0,	/* Vendor */
				"Tunnel-Server-Auth-Id",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, UTF8String_type, NULL);
		};
		/* Accounting-Input-Octets */
		{
			struct dict_avp_data data = {
				363,	/* Code */
				0,	/* Vendor */
				"Accounting-Input-Octets",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_UNSIGNED64	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* Accounting-Output-Octets */
		{
			struct dict_avp_data data = {
				364,	/* Code */
				0,	/* Vendor */
				"Accounting-Output-Octets",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_UNSIGNED64	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* Accounting-Input-Packets */
		{
			struct dict_avp_data data = {
				365,	/* Code */
				0,	/* Vendor */
				"Accounting-Input-Packets",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_UNSIGNED64	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* Accounting-Output-Packets */
		{
			struct dict_avp_data data = {
				366,	/* Code */
				0,	/* Vendor */
				"Accounting-Output-Packets",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_UNSIGNED64	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* Acct-Session-Time */
		{
			struct dict_avp_data data = {
				46,	/* Code */
				0,	/* Vendor */
				"Acct-Session-Time",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_UNSIGNED32	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* Acct-Authentic */
		{
			struct dict_avp_data data = {
				45,	/* Code */
				0,	/* Vendor */
				"Acct-Authentic",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_INTEGER32	/* base type of data */
			};
			struct dict_object        *type;
			struct dict_type_data     tdata = { AVP_TYPE_INTEGER32, "Enumerated(Acct-Authentic)", NULL, NULL, NULL };
			struct dict_enumval_data        t_1 = { "NONE", { .i32=0 }};
			struct dict_enumval_data        t_2 = { "RADIUS", { .i32=1 }};
			struct dict_enumval_data        t_3 = { "LOCAL", { .i32=2 }};
			struct dict_enumval_data        t_4 = { "REMOTE", { .i32=3 }};
			struct dict_enumval_data        t_5 = { "DIAMETER", { .i32=4 }};
			/* Create the Enumerated type, and then the AVP */
			CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
			CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_3, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_4, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_5, type, NULL);
			CHECK_dict_new( DICT_AVP, &data, type, NULL);
		};
		/* Accounting-Auth-Method */
		{
			struct dict_avp_data data = {
				406,	/* Code */
				0,	/* Vendor */
				"Accounting-Auth-Method",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_INTEGER32	/* base type of data */
			};
			struct dict_object        *type;
			struct dict_type_data     tdata = { AVP_TYPE_INTEGER32, "Enumerated(Accounting-Auth-Method)", NULL, NULL, NULL };
			struct dict_enumval_data        t_1 = { "PAP", { .i32=1 }};
			struct dict_enumval_data        t_2 = { "CHAP", { .i32=2 }};
			struct dict_enumval_data        t_3 = { "MS_CHAP_1", { .i32=3 }};
			struct dict_enumval_data        t_4 = { "MS_CHAP_2", { .i32=4 }};
			struct dict_enumval_data        t_5 = { "EAP", { .i32=5 }};
			struct dict_enumval_data        t_6 = { "UNDEFINED", { .i32=6 }};
			struct dict_enumval_data        t_7 = { "NONE", { .i32=7 }};
			/* Create the Enumerated type, and then the AVP */
			CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
			CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_3, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_4, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_5, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_6, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_7, type, NULL);
			CHECK_dict_new( DICT_AVP, &data, type, NULL);
		};
		/* Acct-Delay-Time */
		{
			struct dict_avp_data data = {
				41,	/* Code */
				0,	/* Vendor */
				"Acct-Delay-Time",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_UNSIGNED32	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* Acct-Link-Count */
		{
			struct dict_avp_data data = {
				51,	/* Code */
				0,	/* Vendor */
				"Acct-Link-Count",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_UNSIGNED32	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* Acct-Tunnel-Connection */
		{
			struct dict_avp_data data = {
				68,	/* Code */
				0,	/* Vendor */
				"Acct-Tunnel-Connection",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* Acct-Tunnel-Packets-Lost */
		{
			struct dict_avp_data data = {
				86,	/* Code */
				0,	/* Vendor */
				"Acct-Tunnel-Packets-Lost",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_UNSIGNED32	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* NAS-Identifier */
		{
			struct dict_avp_data data = {
				32,	/* Code */
				0,	/* Vendor */
				"NAS-Identifier",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, UTF8String_type, NULL);
		};
		/* NAS-IP-Address */
		{
			struct dict_avp_data data = {
				4,	/* Code */
				0,	/* Vendor */
				"NAS-IP-Address",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* NAS-IPv6-Address */
		{
			struct dict_avp_data data = {
				95,	/* Code */
				0,	/* Vendor */
				"NAS-IPv6-Address",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* Origin-AAA-Protocol */
		{
			struct dict_avp_data data = {
				408,	/* Code */
				0,	/* Vendor */
				"Origin-AAA-Protocol",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_INTEGER32	/* base type of data */
			};
			struct dict_object        *type;
			struct dict_type_data     tdata = { AVP_TYPE_INTEGER32, "Enumerated(Origin-AAA-Protocol)", NULL, NULL, NULL };
			struct dict_enumval_data        t_1 = { "RADIUS", { .i32=1 }};
			/* Create the Enumerated type, and then the AVP */
			CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
			CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
			CHECK_dict_new( DICT_AVP, &data, type, NULL);
		};
		/* State */
		{
			struct dict_avp_data data = {
				24,	/* Code */
				0,	/* Vendor */
				"State",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* Redirect-Host */
		{
			struct dict_avp_data data = {
				292,	/* Code */
				0,	/* Vendor */
				"Redirect-Host",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_OCTETSTRING	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, DiameterURI_type, NULL);
		};
		/* Redirect-Host-Usage */
		{
			struct dict_avp_data data = {
				261,	/* Code */
				0,	/* Vendor */
				"Redirect-Host-Usage",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_INTEGER32	/* base type of data */
			};
			struct dict_object        *type;
			struct dict_type_data     tdata = { AVP_TYPE_INTEGER32, "Enumerated(Redirect-Host-Usage)", NULL, NULL, NULL };
			struct dict_enumval_data        t_1 = { "DONT_CACHE", { .i32=0 }};
			struct dict_enumval_data        t_2 = { "ALL_SESSION", { .i32=1 }};
			struct dict_enumval_data        t_3 = { "ALL_REALM", { .i32=2 }};
			struct dict_enumval_data        t_4 = { "REALM_AND_APPLICATION", { .i32=3 }};
			struct dict_enumval_data        t_5 = { "ALL_APPLICATION", { .i32=4 }};
			struct dict_enumval_data        t_6 = { "ALL_HOST", { .i32=5 }};
			struct dict_enumval_data        t_7 = { "ALL_USER", { .i32=6 }};
			/* Create the Enumerated type, and then the AVP */
			CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
			CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_3, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_4, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_5, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_6, type, NULL);
			CHECK_dict_new( DICT_ENUMVAL, &t_7, type, NULL);
			CHECK_dict_new( DICT_AVP, &data, type, NULL);
		};
		/* Redirect-Max-Cache-Time */
		{
			struct dict_avp_data data = {
				262,	/* Code */
				0,	/* Vendor */
				"Redirect-Max-Cache-Time",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_UNSIGNED32	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
		};
		/* Tunneling */
		{
			/* Grouped */
			struct dict_object * avp;
			struct dict_avp_data data = {
				401,	/* Code */
				0,	/* Vendor */
				"Tunneling",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_GROUPED	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
		}
		/* CHAP-Auth */
		{
			/* Grouped */
			struct dict_object * avp;
			struct dict_avp_data data = {
				402,	/* Code */
				0,	/* Vendor */
				"CHAP-Auth",	/* Name */
				AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,	/* Fixed flags */
				AVP_FLAG_MANDATORY,	/* Fixed flag values */
				AVP_TYPE_GROUPED	/* base type of data */
			};
			CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
		}

	
   }

   /* Commands section */
   {

   }

   return 0;
}

static int dict_rfc7155_avps_load_rules(char * conffile)
{
   /* Grouped AVP section */
   {
	  /* Tunneling */
	  {
		/* Grouped */
		struct dict_object * avp;
		struct dict_avp_request avp_vendor_plus_name =  { .avp_vendor = 0, .avp_name = "Tunneling"};
		CHECK_dict_search(DICT_AVP,  AVP_BY_NAME_AND_VENDOR, &avp_vendor_plus_name, &avp)
		struct local_rules_definition rules[] =
		{
			{ { .avp_vendor = 0, .avp_name = "Tunnel-Type"}, RULE_REQUIRED, -1, -1 },
			{ { .avp_vendor = 0, .avp_name = "Tunnel-Medium-Type"}, RULE_REQUIRED, -1, -1 },
			{ { .avp_vendor = 0, .avp_name = "Tunnel-Client-Endpoint"}, RULE_REQUIRED, -1, -1 },
			{ { .avp_vendor = 0, .avp_name = "Tunnel-Server-Endpoint"}, RULE_REQUIRED, -1, -1 },
			{ { .avp_vendor = 0, .avp_name = "Tunnel-Preference"}, RULE_OPTIONAL, -1, -1 },
			{ { .avp_vendor = 0, .avp_name = "Tunnel-Client-Auth-Id"}, RULE_OPTIONAL, -1, -1 },
			{ { .avp_vendor = 0, .avp_name = "Tunnel-Server-Auth-Id"}, RULE_OPTIONAL, -1, -1 },
			{ { .avp_vendor = 0, .avp_name = "Tunnel-Assignment-Id"}, RULE_OPTIONAL, -1, -1 },
			{ { .avp_vendor = 0, .avp_name = "Tunnel-Password"}, RULE_OPTIONAL, -1, -1 },
			{ { .avp_vendor = 0, .avp_name = "Tunnel-Private-Group-Id"}, RULE_OPTIONAL, -1, -1 }
		};
		PARSE_loc_rules( rules, avp );
	  }
	  /* CHAP-Auth */
	  {
		/* Grouped */
		struct dict_object * avp;
		struct dict_avp_request avp_vendor_plus_name =  { .avp_vendor = 0, .avp_name = "CHAP-Auth"};
		CHECK_dict_search(DICT_AVP,  AVP_BY_NAME_AND_VENDOR, &avp_vendor_plus_name, &avp)
		struct local_rules_definition rules[] =
		{
			{ { .avp_vendor = 0, .avp_name = "CHAP-Algorithm"}, RULE_REQUIRED, -1, -1 },
			{ { .avp_vendor = 0, .avp_name = "CHAP-Ident"}, RULE_REQUIRED, -1, -1 },
			{ { .avp_vendor = 0, .avp_name = "CHAP-Response"}, RULE_OPTIONAL, -1, -1 }
		};
		PARSE_loc_rules( rules, avp );
	  }

   }	

   /* Commands section */
   {

   }

   LOG_D( "Extension 'Dictionary definitions for rfc7155_avps (None)' initialized");
   return 0;
}

int dict_entry(char * conffile)
{
	dict_rfc7155_avps_load_defs(conffile);
	return dict_rfc7155_avps_load_rules(conffile);
}

const char* dict_rfc7155_avps_proto_ver(char * conffile) {
	return rfc7155_avps_proto_ver;
}

const double dict_rfc7155_avps_gen_ts(char * conffile) {
	return rfc7155_avps_gen_date;
}

EXTENSION_ENTRY2("dict_rfc7155_avps", dict_rfc7155_avps_load_defs, dict_rfc7155_avps_load_rules, "dict_rfc4004_avps");



